package org.mm4juser.controller;

import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpSession;
import org.mm4juser.entity.DTO.LoginDTO;
import org.mm4juser.entity.User;
import org.mm4juser.service.UserService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

//ul = user-login
@RestController
public class LoginController {
	@Resource
	private UserService userService;
	
	
	/**
	 * 处理用户登录请求的接口方法
	 *
	 * @param loginDTO 包含用户登录信息的DTO对象
	 * @param session  HTTP会话对象，用于保存用户登录状态
	 *
	 * @return 返回ResponseEntity<?>对象，包含登录结果信息
	 */
	@PostMapping("ul/login")  // POST请求映射，指定请求路径为"ul/login"
	public ResponseEntity<?> login(  // 定义登录接口方法，返回ResponseEntity对象
	                                 @RequestBody  // 请求体注解，表示将请求体映射到LoginDTO对象
	                                 LoginDTO loginDTO,
	                                 // 登录数据传输对象，包含用户登录信息
	                                 HttpSession session) {  // HTTP会话对象，用于管理用户会话
		// 调用userService的login方法处理登录逻辑
		LoginDTO result = userService.login(
			loginDTO
		);
		// 将用户对象和token保存到会话中
		// 返回登录结果
		if (result.getMessage()
			.equals("登录成功")) {
			return ResponseEntity.status(200)
				.body(result);
		} else if (result.getMessage()
			.equals("密码错误")) {
			return ResponseEntity.status(400)// 请求成功但是账号密码不匹配
				.body("密码错误");
		} else {
			return ResponseEntity.status(404)// 请求成功但是用户不存在（邮箱未注册）
				.body("用户不存在");
		}
	}
	
	
	/**
	 * 用户注册接口 处理HTTP POST请求，路径为"ul/reg"
	 *
	 * @param user 包含用户注册信息的请求体，通过@RequestBody注解自动绑定到User对象
	 *
	 * @return 返回ResponseEntity<?>类型，包含注册操作的结果信息
	 */
	@PostMapping("ul/reg")
	public ResponseEntity<?> register(@RequestBody User user) {
		// 调用userService的register方法处理用户注册逻辑
		return userService.register(user);
	}
	
	
	/**
	 * 用户退出接口
	 *
	 * @param user 用户信息，通过请求体传递
	 *
	 * @return 返回ResponseEntity，包含操作结果
	 */
	@PostMapping("ul/exit")
	public ResponseEntity<?> exit(@RequestBody User user) {
		// 调用userService的exit方法处理用户退出逻辑
		return userService.exit(user);
	}
	
}
